A hosting center provides computing services to multiple customers. Each customer is allocated a subset of the service provider's infrastructure resources, such as servers, to meet its needs. Customer needs change over time, and in particular, peak demands for resources can exceed average demands by orders of magnitude. A simple static allocation of resources to satisfy peak demand leaves resources underutilized. Reconfiguring infrastructure resources dynamically, in response to customer needs, demands prompt attention from administrative personnel, increasing both operational costs and the risk of failing to provide adequate service. The problem for the hosting center is how to respond quickly to changes in customer needs such that infrastructure resources and staff are employed in an efficient and cost effective way. Computing utilities attempt to address this problem by automating the creation and management of one or more computing services on shared infrastructures.
Previous work in computing utilities varies in the types of services that are offered, the resources that are used, and the extent to which operation is automated. Operations subject to automation are wide ranging, and include creating services, deploying a service for a customer, modifying the set of resources used to provide the service, and incorporating new resource instances and types into the hosting center and its services.
One system automated the provisioning of front end servers in Web sites based on metrics such as server load and response time. It included a component that discovered server and network topology automatically. Another system provided a variety of multi-tier Web sites in which pre-configured servers could be allocated to different tiers automatically based on metrics such as server load. Another system also allocated server resources in response to server load, but modeled both the value of allocating resources to each customer and the cost of employing those resources, with an emphasis on energy cost. More recent work includes allocation of other resource types such as memory and storage, and allocation of servers for general use.
A growing number of industrial products aim to provide multi-tier applications over a physical infrastructure consisting of a variety of resource. They vary in many respects, such as the types of resources provided (e.g., servers and storage); specific operating systems and middleware supported; assumptions and characteristics of the network infrastructure (e.g., whether or not network isolation is provided via VLAN); level of monitoring support (e.g., resource usage, failure detection, SLA, threshold based alerting); support for resource discovery; support for modifying service resources once deployed; whether modifications can occur automatically (e.g., triggered by SLAs); and the extent to which the products can or must be customized to fit preexisting hosting center infrastructures.
Work is being done at the application layer to automate deployment and management of distributed applications. An application is described as a collection of related, reusable components, which may represent resources or subsystems. The description of an application includes dependency information to ensure that, for example, components are started in the correct sequence. This is not used for low level resource configuration tasks such as installing operating systems on servers, but for higher level application specific configuration.
Provisioning refers to the process of allocating a set of infrastructure resources and configuring them to provide the desired computing services for use by a customer. Provisioning is a complex set of tasks that can include configuring network devices, installing operating systems and application software, obtaining software licenses, installing monitors, and enabling customer access by creating user accounts.
Provisioning is automated by codifying the procedures or scripts for these tasks. Some products provide a GUI interface to assist in the creation and selection of these procedures. For example, a drag and drop interface may be used to specify the “virtual wiring” of resources for an application environment to be deployed. Virtual wiring could include the tier structure of the environment, rules for firewalls, and which operating system to install on servers. The wiring diagram is captured as a template description. This description is used to create and delete environments, and it may be modified to add or remove resources from a computing environment.
In some systems codifying the procedures is done on a service specific basis. Changes in resource types, connectivity, or service requirements can require re-implementation of these procedures. If they are implemented in an ad hoc manner or independently, it can be difficult to systematically enforce best practices or operational constraints. Thus, it is desirable to provide a system that improves upon the prior art.